package com.ts.api.module.product.service;

import com.ts.api.module.product.entity.po.ProductApplyFlowPO;
import com.ts.api.module.product.entity.qo.ProductApplyFlowQO;

import java.util.List;

/**
 *  机构进件流程
 *
 *  @author Pan
 */
public interface ProductApplyFlowService {

    /**
     *  根据查询对象查询流程集合
     *
     *  @param  productApplyFlowQO
     *  @return List
     */
    List<ProductApplyFlowPO> list(ProductApplyFlowQO productApplyFlowQO);

    /**
     * 根据查询对象查询流程集合，用于撞库
     *
     * @param productApplyFlowQO
     * @return
     */
    List<ProductApplyFlowPO> listForDataExchange(ProductApplyFlowQO productApplyFlowQO);

    /**
     *  根据查询对象获取进件流程
     *
     *  @param  productApplyFlowQO
     *  @return
     */
    ProductApplyFlowPO get(ProductApplyFlowQO productApplyFlowQO);

    /**
     *  根据流程状态查询总数
     *
     *  @param  productApplyFlowQO
     *  @return
     */
    int countStatus(ProductApplyFlowQO productApplyFlowQO);

    /**
     *  计划流程日志
     *
     *  @param  productApplyFlowPO
     *  @param  async   true开启异步
     *  @return int
     */
    void insert(ProductApplyFlowPO productApplyFlowPO, boolean async);

    /**
     *  批量插入机构进件流程
     *
     *  @param  listProductApplyFlowPO
     *  @return int
     */
    void batchInsert(List<ProductApplyFlowPO> listProductApplyFlowPO);

    /**
     *  更新流程状态根据流程主键id
     *
     *  @param  productApplyFlowPO  流程实体
     *  @return row
     */
    int updateFlowStatusById(ProductApplyFlowPO productApplyFlowPO);
}
